package br.unicamp.ic.sgct.client.apresentacao.ucs;

import java.util.List;


import br.unicamp.ic.sgct.client.aplicacao.conferencia.ConferenciaListener;
import br.unicamp.ic.sgct.client.aplicacao.usuario.UsuarioListener;
import br.unicamp.ic.sgct.client.aplicacao.usuario.UsuarioListener.HandlerCancelar;

import br.unicamp.ic.sgct.client.apresentacao.MyConstants;
import br.unicamp.ic.sgct.client.apresentacao.views.ViewDadosUsuario;
import br.unicamp.ic.sgct.client.apresentacao.views.ViewListaConferencia;
import br.unicamp.ic.sgct.client.apresentacao.views.ViewListaUsuario;
import br.unicamp.ic.sgct.client.apresentacao.widgets.ButtonCampoForm;
import br.unicamp.ic.sgct.client.dominio.to.ConferenciaTO;
import br.unicamp.ic.sgct.client.dominio.to.UsuarioTO;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.DecoratedTabPanel;

public class CancelamentoScreen extends BaseConferenciaScreen {
	
	private static MyConstants obterMyConstants()
	{
		return (MyConstants) GWT.create(MyConstants.class); 
	}

    private ConferenciaTO conferencia = null;
    private List<UsuarioTO> listUsuario = null;
    private UsuarioTO usuario = null;
    //
    private ViewListaConferencia viewListaConferencia = new ViewListaConferencia(obterMyConstants().conferenciaAberta(), 0,
            new ViewListaConferencia.HandlerClickListaConferencia() {

                @Override
                public void handle(ConferenciaTO to) {
                    conferencia = to;
                    controladoraLogin.getMensagemWidget().limparMensagem();
                    showLoading(true);
                    controladoraLogin.obterParticipacoesConferencia(conferencia, new UsuarioListener.HandlerObterParticipacoesConferencia() {

                        @Override
                        public void handleSucesso(List<UsuarioTO> result) {
                            showLoading(false);
                            listUsuario = result;
                            if (listUsuario.isEmpty()) {
                                controladoraLogin.setMensagemErro(obterMyConstants().naoHaInscricao());
                            } else {
                                listUsuario = result;
                                viewListaUsuario.montar(listUsuario);
                                panelTabOpcoes.selectTab(1);

                            }
                        }

                        @Override
                        public void handleErro(Throwable caught) {
                            controladoraLogin.setMensagemErro(caught.getMessage());
                        }
                    });

                }
            });
    private ViewListaUsuario viewListaUsuario = new ViewListaUsuario(obterMyConstants().participacaoInscricao(), 1, new ViewListaUsuario.HandlerClickListaUsuario() {

        @Override
        public void handle(UsuarioTO to) {
            controladoraLogin.getMensagemWidget().limparMensagem();
            usuario = to;
            controladoraLogin.getMensagemWidget().limparMensagem();
            viewDadosUsuario.montar(usuario);
            panelTabOpcoes.selectTab(2);
        }
    });
    private ViewDadosUsuario viewDadosUsuario = new ViewDadosUsuario(obterMyConstants().dadosUsuario(), 2).addH(new ButtonCampoForm("<i>" +obterMyConstants().cancelaInscricao() + "</i>", new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            controladoraLogin.getMensagemWidget().limparMensagem();

            if (usuario == null) {
                controladoraLogin.setMensagemErro(obterMyConstants().inscricoesSelecionadas());
            } else {
                showLoading(true);
                
                controladoraLogin.cancelar(usuario, new HandlerCancelar() {
					
					public void handleSucesso(Boolean result) {
						// TODO Auto-generated method stub
						//viewListaUsuario.montar(listUsuario);
                        panelTabOpcoes.selectTab(0);
                        showLoading(false);
                        
						Window.alert(obterMyConstants().cancelamentoEfetuado());						
					}
					
					public void handleErro(Throwable caught) {
						// TODO Auto-generated method stub
						controladoraLogin.setMensagemErro(obterMyConstants().erroAoCancelar() + "\n" + caught.getMessage());
					}
				});
                
               // Window.alert("Atividade 5 (continuacao) - Implementar aqui\n\n" );
            }
        }
    }));
    private static DateTimeFormat _dtTimeFormat = DateTimeFormat.getFormat("dd/MM/yyy");
    //
    //recursos Inscricao UI
    private UsuarioListener controladoraLogin = null;
    private ConferenciaListener controladoraConferencia = null;
    //recursos Conferencia UI

    /**
     *
     * @param usuario
     * @param controladora
     * @param conferenciaCtrl
     */
    public CancelamentoScreen(
            final ConferenciaListener controladoraConferencia,
            final UsuarioListener controladoraLogin) {
        super();
        this.controladoraConferencia = controladoraConferencia;
        this.controladoraLogin = controladoraLogin;
        this.initWidget(super.initPanel(controladoraConferencia));
        showLoading(true);
        controladoraConferencia.listarConferenciasAbertas(new ConferenciaListener.HandlerListarConferenciasAbertas() {

            @Override
            public void handleSucesso(List<ConferenciaTO> listTo) {
                showLoading(false);
                if (listTo.isEmpty()) {
                    controladoraConferencia.setMensagemErro(obterMyConstants().naoHaConferencia());
                } else {
                    viewListaConferencia.montar(listTo);
                }
            }

            @Override
            public void handleErro(Throwable caught) {
                showLoading(true);
                controladoraConferencia.setMensagemErro("InscricaoScreen " + caught.getMessage());
            }
        });



    }

    @Override
    public void load() {
        this.controladoraLogin.getMensagemWidget().limparMensagem();
        this.panelTabOpcoes.selectTab(0);
        this.conferencia = null;
        this.listUsuario = null;
        this.usuario = null;
    }

    @Override
    protected DecoratedTabPanel initPanelTabOpcoes() {
        panelTabOpcoes = new DecoratedTabPanel();
        panelTabOpcoes.add(viewListaConferencia, viewListaConferencia.getStrTabTitle());
        panelTabOpcoes.add(viewListaUsuario, viewListaUsuario.getStrTabTitle());
        panelTabOpcoes.add(viewDadosUsuario, viewDadosUsuario.getStrTabTitle());
        viewListaUsuario.getStrTabTitle().setVisible(false);
        viewDadosUsuario.getStrTabTitle().setVisible(false);
        panelTabOpcoes.selectTab(0);
        panelTabOpcoes.setWidth("750px");
        panelTabOpcoes.setAnimationEnabled(true);
        panelTabOpcoes.addSelectionHandler(new SelectionHandler() {

            @Override
            public void onSelection(SelectionEvent event) {
                Integer item = (Integer) event.getSelectedItem();
                if (item == 0) {
                    conferencia = null;
                    usuario = null;
                    viewListaUsuario.getStrTabTitle().setVisible(false);
                    viewDadosUsuario.getStrTabTitle().setVisible(false);
                } else {
                    if (item == 1) {
                        usuario = null;
                        if (conferencia == null) {
                            panelTabOpcoes.selectTab(0);
                            controladoraConferencia.setMensagemErro(obterMyConstants().selecionaUmaConferencia());
                        } else {
                            viewListaUsuario.getStrTabTitle().setVisible(true);
                            viewDadosUsuario.getStrTabTitle().setVisible(false);
                        }
                    } else {
                        if (item == 2) {
                            if (conferencia == null) {
                                panelTabOpcoes.selectTab(0);
                                controladoraConferencia.setMensagemErro(obterMyConstants().selecionaUmaConferencia());
                            } else {
                                if (usuario == null) {
                                    panelTabOpcoes.selectTab(1);
                                    controladoraConferencia.setMensagemErro(obterMyConstants().selecionaUmaConferencia());
                                } else {
                                    viewListaUsuario.getStrTabTitle().setVisible(true);
                                    viewDadosUsuario.getStrTabTitle().setVisible(true);
                                }
                            }
                        }
                    }
                }
            }
        });
        return panelTabOpcoes;
    }
}
